<script>
        
// 继承父类的方法
// 1.Object.create，不管多少层级都可以
// 2.assign，第一层级可以可以继承，即儿子可以继承，孙子继承不了爷爷的
// 3.=赋值，如果爷爷，同时有好几个子类，其中一个子类用了  子类.prototype = 父类.prototype;那么其他的子类也会拥有这个子类的方法，相当于这个子类的原型的改变会影响父类的原型的改变


// 动物类 一级  ,底下的三个类别都有color属性，则可以将color属性添加在父类上
function Animals(look,color){
    this.look = look
    this.color = color
}
Animals.prototype.eat = function(){
    return '正在进食' 
}


// 两栖类 二级
function Amphibious(look,color){
    // 继承父类的属性
    Animals.call(this,look,color)
}
Amphibious.prototype.waterInto = function(){
    return '正在入水' 
}
Amphibious.prototype.waterOut = function(){
    return '正在上岸'
}
// 继承父类的方法(assign)
Object.assign(Amphibious.prototype,Animals.prototype)
// 实例一个两栖类
let amphibious1 = new Amphibious('两栖','白色');
console.log(amphibious1);




// 哺乳类 二级
function Suckler(leg,look,color){
    // 继承动物类的属性
    Animals.call(this,look,color)
    // 哺乳类自己的属性
    this.leg = leg
    
}
// 继承父类的方法(Object.create)
Suckler.prototype = Object.create(Animals.prototype);
Suckler.prototype.constructor = Suckler;
Suckler.prototype.creep = function(){
    return '正在爬行' 
}
// 实例一个哺乳类
let suckler1 = new Suckler(4,'哺乳','黄色');
console.log(suckler1 );




// 鸟类 二级
function Birds(wingspan,look,color){
    Animals.apply(this,[look,color])
    this.wingspan = wingspan
}

// // 继承父类的方法(=赋值,有bug，在给鸟类的原型添加方法时，同时也改变了父类的原型)
// Birds.prototype = Animals.prototype;
// Birds.prototype.constructor = Birds;

// 继承父类的方法(Object.create)
Birds.prototype = Object.create(Animals.prototype);
Birds.prototype.constructor = Birds;

Birds.prototype.fly = function(){
    return '正在飞行' 
}
// 实例一个鸟类
let bird1 = new Birds('翅膀','鸟类','花色');
console.log(bird1 );






// 虎类 三级
function Tiger(type,speed,leg,look,color){
    Suckler.call(this,leg,look,color)
    this.type = type,
    this.speed = speed
}
// 继承父类的方法（assign ，有bug，将爷爷类的方法没有继承过来）
// Object.assign(Tiger.prototype,Suckler.prototype)

// 继承父类的方法(Object.create)
Tiger.prototype = Object.create(Suckler.prototype);
Tiger.prototype.constructor = Tiger;

Tiger.prototype.hunt = function(){
    return '正在打猎'
}

// 实例一个虎
let tiger1 = new Tiger('非洲虎','10m/s',4,'哺乳类','黄黑相间')
console.log(tiger1);




// 鹰类 
function Eagle(type,speed,vision,wingspan,look,color){
    Birds.call(this,wingspan,look,color)
    this.type = type,
    this.speed = speed,
    this.vision = vision
}
// 继承父类的方法(Object.create)
Eagle.prototype = Object.create(Birds.prototype);
Eagle.prototype.constructor = Eagle;

Eagle.prototype. hunt = function(){
    return '正在打猎'
}
// 实例一个鹰
let eagle1 = new Eagle('老鹰','10m/s','夜间视力好','两个翅膀','鸟类','黑色')
console.log(eagle1);







</script>